package com.rrd.dw.mr.gzip.kafka;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rrd.dw.utils.DateUtil;
import com.ucredit.babel.common.model.BaseModel;
import com.ucredit.babel.common.model.RecordType;
import com.ucredit.babel.common.model.third.oneconnect.OneConnectRecord;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper.Context;

import java.io.IOException;
import java.util.Date;

/**
 * 壹账通-好信常贷客
 *
 * @author renzhanzheng
 */

public class OneConnectOffenlendParse extends ParseBase {

    private Text val = new Text();
    private Text key = new Text();

    /**
     * 壹账通-好信常贷客
     *
     * @param model
     * @throws IOException
     * @throws InterruptedException
     */

    @Override
    public boolean parseJob(Context context, BaseModel<?> model, String successful) throws IOException, InterruptedException {
        OneConnectRecord obj = (OneConnectRecord) model;
        if (!("." + obj.getServiceName()).equals(getSubType())) {
            return false;
        }
        Date date = new Date(obj.getTimestamp());
        if (date.before(DateUtil.formateToDate("2020-07-22 19:00:00"))) {
            return false;
        }

        JSONObject info = obj.getData() == null ? new JSONObject() : JSON.parseObject(obj.getData());
        JSONObject mobileUsingStatData = info.getJSONObject("mobileUsingStatData") == null ? new JSONObject() : info.getJSONObject("mobileUsingStatData");

        StringBuilder sb = getBaseInfo(obj, successful);
        //序列号
        sb.append(info.getString("seqNo")).append(CRT001);
        //姓名
        sb.append(info.getString("name")).append(CRT001);
        //手机号码
        sb.append(info.getString("mobileNo")).append(CRT001);
        //证件号码
        sb.append(info.getString("idNo")).append(CRT001);
        //证件类型
        sb.append(info.getString("idType")).append(CRT001);
        //错误代码
        sb.append(info.getString("erCode")).append(CRT001);
        //错误信息
        sb.append(info.getString("erMsg")).append(CRT001);
        //命中机构数
        sb.append(info.getString("orgNumber")).append(CRT001);
        //近15天命中机构数
        sb.append(info.getString("last15dOrgNum")).append(CRT001);
        //近1月命中机构数
        sb.append(info.getString("last1mOrgNum")).append(CRT001);
        //近3月命中机构数
        sb.append(info.getString("last3mOrgNum")).append(CRT001);
        //近6月命中机构数
        sb.append(info.getString("last6mOrgNum")).append(CRT001);
        //近9月命中机构数
        sb.append(info.getString("last9mOrgNum")).append(CRT001);
        //近12月命中机构数
        sb.append(info.getString("last12mOrgNum")).append(CRT001);
        //命中银行机构总数
        sb.append(info.getString("baksNum")).append(CRT001);
        //近15天命中银行机构总数
        sb.append(info.getString("last15dBaksNum")).append(CRT001);
        //近1月命中银行机构总数
        sb.append(info.getString("last1mBaksNum")).append(CRT001);
        //近3月命中银行机构总数
        sb.append(info.getString("last3mBaksNum")).append(CRT001);
        //近6月命中银行机构总数
        sb.append(info.getString("last6mBaksNum")).append(CRT001);
        //近9月命中银行机构总数
        sb.append(info.getString("last9mBaksNum")).append(CRT001);
        //近12月命中银行机构总数
        sb.append(info.getString("last12mBaksNum")).append(CRT001);
        //命中助贷机构总数
        sb.append(info.getString("htlsNum")).append(CRT001);
        //近15天命中助贷机构总数
        sb.append(info.getString("last15dHtlsNum")).append(CRT001);
        //近1月命中助贷机构总数
        sb.append(info.getString("last1mHtlsNum")).append(CRT001);
        //近3月命中助贷机构总数
        sb.append(info.getString("last3mHtlsNum")).append(CRT001);
        //近6月命中助贷机构总数
        sb.append(info.getString("last6mHtlsNum")).append(CRT001);
        //近9月命中助贷机构总数
        sb.append(info.getString("last9mHtlsNum")).append(CRT001);
        //近12月命中助贷机构总数
        sb.append(info.getString("last12mHtlsNum")).append(CRT001);
        //命中消费金融机构总数
        sb.append(info.getString("cnssNum")).append(CRT001);
        //近15天命中消费金融机构总数
        sb.append(info.getString("last15dCnssNum")).append(CRT001);
        //近1月命中消费金融机构总数
        sb.append(info.getString("last1mCnssNum")).append(CRT001);
        //近3月命中消费金融机构总数
        sb.append(info.getString("last3mCnssNum")).append(CRT001);
        //近6月命中消费金融机构总数
        sb.append(info.getString("last6mCnssNum")).append(CRT001);
        //近9月命中消费金融机构总数
        sb.append(info.getString("last9mCnssNum")).append(CRT001);
        //近12月命中消费金融机构总数
        sb.append(info.getString("last12mCnssNum")).append(CRT001);
        //命中P2P小贷机构总数
        sb.append(info.getString("p2psNum")).append(CRT001);
        //近15天命中P2P小贷机构总数
        sb.append(info.getString("last15dP2psNum")).append(CRT001);
        //近1月命中P2P小贷机构总数
        sb.append(info.getString("last1mP2psNum")).append(CRT001);
        //近3月命中P2P小贷机构总数
        sb.append(info.getString("last3mP2psNum")).append(CRT001);
        //近6月命中P2P小贷机构总数
        sb.append(info.getString("last6mP2psNum")).append(CRT001);
        //近9月命中P2P小贷机构总数
        sb.append(info.getString("last9mP2psNum")).append(CRT001);
        //近12月命中P2P小贷机构总数
        sb.append(info.getString("last12mP2psNum")).append(CRT001);
        //命中规模为1机构总数
        sb.append(info.getString("scale1sNum")).append(CRT001);
        //近15天命中规模为1机构总数
        sb.append(info.getString("last15dScale1Num")).append(CRT001);
        //近1月命中规模为1机构总数
        sb.append(info.getString("last1mScale1Num")).append(CRT001);
        //近3月命中规模为1机构总数
        sb.append(info.getString("last3mScale1Num")).append(CRT001);
        //近6月命中规模为1机构总数
        sb.append(info.getString("last6mScale1Num")).append(CRT001);
        //近9月命中规模为1机构总数
        sb.append(info.getString("last9mScale1Num")).append(CRT001);
        //近12月命中规模为1机构总数
        sb.append(info.getString("last12mScale1Num")).append(CRT001);
        //命中规模为2机构总数
        sb.append(info.getString("scale2sNum")).append(CRT001);
        //近15天命中规模为2机构总数
        sb.append(info.getString("last15dScale2Num")).append(CRT001);
        //近1月命中规模为2机构总数
        sb.append(info.getString("last1mScale2Num")).append(CRT001);
        //近3月命中规模为2机构总数
        sb.append(info.getString("last3mScale2Num")).append(CRT001);
        //近6月命中规模为2机构总数
        sb.append(info.getString("last6mScale2Num")).append(CRT001);
        //近9月命中规模为2机构总数
        sb.append(info.getString("last9mScale2Num")).append(CRT001);
        //近12月命中规模为2机构总数
        sb.append(info.getString("last12mScale2Num")).append(CRT001);
        //命中规模为3机构总数
        sb.append(info.getString("scale3sNum")).append(CRT001);
        //近15天命中规模为3机构总数
        sb.append(info.getString("last15dScale3Num")).append(CRT001);
        //近1月命中规模为3机构总数
        sb.append(info.getString("last1mScale3Num")).append(CRT001);
        //近3月命中规模为3机构总数
        sb.append(info.getString("last3mScale3Num")).append(CRT001);
        //近6月命中规模为3机构总数
        sb.append(info.getString("last6mScale3Num")).append(CRT001);
        //近9月命中规模为3机构总数
        sb.append(info.getString("last9mScale3Num")).append(CRT001);
        //近12月命中规模为3机构总数
        sb.append(info.getString("last12mScale3Num")).append(CRT001);
        //命中规模为4机构总数
        sb.append(info.getString("scale4sNum")).append(CRT001);
        //近15天命中规模为4机构总数
        sb.append(info.getString("last15dScale4Num")).append(CRT001);
        //近1月命中规模为4机构总数
        sb.append(info.getString("last1mScale4Num")).append(CRT001);
        //近3月命中规模为4机构总数
        sb.append(info.getString("last3mScale4Num")).append(CRT001);
        //近6月命中规模为4机构总数
        sb.append(info.getString("last6mScale4Num")).append(CRT001);
        //近9月命中规模为4机构总数
        sb.append(info.getString("last9mScale4Num")).append(CRT001);
        //近12月命中规模为4机构总数
        sb.append(info.getString("last12mScale4Num")).append(CRT001);
        //机构查询总次数
        sb.append(info.getString("allMonthsOrgQueryNum")).append(CRT001);
        //近15天机构查询总次数
        sb.append(info.getString("halfMonthsOrgQueryNum")).append(CRT001);
        //近1月机构查询总次数
        sb.append(info.getString("oneMonthsOrgQueryNum")).append(CRT001);
        //近3月机构查询总次数
        sb.append(info.getString("threeMonthsOrgQueryNum")).append(CRT001);
        //近6月机构查询总次数
        sb.append(info.getString("sixMonthsOrgQueryNum")).append(CRT001);
        //近9月机构查询总次数
        sb.append(info.getString("nineMonthsOrgQueryNum")).append(CRT001);
        //近12月机构查询总次数
        sb.append(info.getString("twelveMonthsOrgQueryNum")).append(CRT001);
        //申请用不同手机号个数
        sb.append(info.getString("allMonthsMobileNum")).append(CRT001);
        //近15天申请不同手机号个数
        sb.append(info.getString("last15dMobileNum")).append(CRT001);
        //近1月申请不同手机号个数
        sb.append(info.getString("last1mMobileNum")).append(CRT001);
        //近3月申请不同手机号个数
        sb.append(info.getString("last3mMobileNum")).append(CRT001);
        //近6月申请不同手机号个数
        sb.append(info.getString("last6mMobileNum")).append(CRT001);
        //近9月申请不同手机号个数
        sb.append(info.getString("last9mMobileNum")).append(CRT001);
        //近12月申请不同手机号个数
        sb.append(info.getString("last12mMobileNum")).append(CRT001);
        //申请机构规模类型数
        sb.append(info.getString("var11")).append(CRT001);
        //只有一次申请的机构数
        sb.append(info.getString("var12")).append(CRT001);
        //工作日申请次数占比
        sb.append(info.getString("var13")).append(CRT001);
        //变量14
        sb.append(info.getString("var14")).append(CRT001);
        //变量15
        sb.append(info.getString("var15")).append(CRT001);
        //变量16
        sb.append(info.getString("var16")).append(CRT001);
        //变量17
        sb.append(info.getString("var17")).append(CRT001);
        //变量18
        sb.append(info.getString("var18")).append(CRT001);
        //变量19
        sb.append(info.getString("var19")).append(CRT001);
        //变量20
        sb.append(info.getString("var20")).append(CRT001);
        //变量21
        sb.append(info.getString("var21")).append(CRT001);
        //变量22
        sb.append(info.getString("var22")).append(CRT001);
        //变量23
        sb.append(info.getString("var23")).append(CRT001);
        //变量24
        sb.append(info.getString("var24")).append(CRT001);
        //变量25
        sb.append(info.getString("var25")).append(CRT001);
        //变量26
        sb.append(info.getString("var26")).append(CRT001);
        //变量27
        sb.append(info.getString("var27")).append(CRT001);
        //变量28
        sb.append(info.getString("var28")).append(CRT001);
        //变量29
        sb.append(info.getString("var29")).append(CRT001);
        //变量30
        sb.append(info.getString("var30")).append(CRT001);
        //变量31
        sb.append(info.getString("var31")).append(CRT001);
        //变量32
        sb.append(info.getString("var32")).append(CRT001);
        //变量33
        sb.append(info.getString("var33")).append(CRT001);
        //变量34
        sb.append(info.getString("var34")).append(CRT001);
        //变量35
        sb.append(info.getString("var35")).append(CRT001);
        //变量36
        sb.append(info.getString("var36")).append(CRT001);
        //变量37
        sb.append(info.getString("var37")).append(CRT001);
        //变量38
        sb.append(info.getString("var38")).append(CRT001);
        //变量39
        sb.append(info.getString("var39")).append(CRT001);
        //变量40
        sb.append(info.getString("var40")).append(CRT001);
        //变量41
        sb.append(info.getString("var41")).append(CRT001);
        //变量42
        sb.append(info.getString("var42")).append(CRT001);
        //变量43
        sb.append(info.getString("var43")).append(CRT001);
        //变量44
        sb.append(info.getString("var44")).append(CRT001);
        //变量45
        sb.append(info.getString("var45")).append(CRT001);
        //变量46
        sb.append(info.getString("var46")).append(CRT001);
        //变量47
        sb.append(info.getString("var47")).append(CRT001);
        //变量48
        sb.append(info.getString("var48")).append(CRT001);
        //变量49
        sb.append(info.getString("var49")).append(CRT001);
        //变量50
        sb.append(info.getString("var50")).append(CRT001);
        //明细数据
        sb.append(info.getString("detailInfoData")).append(CRT001);
        //使用本手机号出现次数占比
        sb.append(mobileUsingStatData.getString("mobilePop")).append(CRT001);
        //近15天使用本手机号出现次数占比
        sb.append(mobileUsingStatData.getString("last15dMobilePop")).append(CRT001);
        //近1月使用本手机号出现次数占比
        sb.append(mobileUsingStatData.getString("last1mMobilePop")).append(CRT001);
        //近3月使用本手机号出现次数占比
        sb.append(mobileUsingStatData.getString("last3mMobilePop")).append(CRT001);
        //近6月使用本手机号出现次数占比
        sb.append(mobileUsingStatData.getString("last6mMobilePop")).append(CRT001);
        //近9月使用本手机号出现次数占比
        sb.append(mobileUsingStatData.getString("last9mMobilePop")).append(CRT001);
        //近12月使用本手机号出现次数占比
        sb.append(mobileUsingStatData.getString("last12mMobilePop")).append(CRT001);
        //变量1
        sb.append(mobileUsingStatData.getString("var1")).append(CRT001);
        //变量2
        sb.append(mobileUsingStatData.getString("var2")).append(CRT001);
        //变量3
        sb.append(mobileUsingStatData.getString("var3")).append(CRT001);
        //变量4
        sb.append(mobileUsingStatData.getString("var4")).append(CRT001);
        //变量5
        sb.append(mobileUsingStatData.getString("var5")).append(CRT001);
        //变量6
        sb.append(mobileUsingStatData.getString("var6")).append(CRT001);
        //变量7
        sb.append(mobileUsingStatData.getString("var7")).append(CRT001);
        //变量8
        sb.append(mobileUsingStatData.getString("var8")).append(CRT001);
        //变量9
        sb.append(mobileUsingStatData.getString("var9")).append(CRT001);
        //变量10
        sb.append(mobileUsingStatData.getString("var10")).append(CRT001);

        key.set(getKey());
        val.set(sb.toString().replace("\n", "").replace("\r", " "));
        context.write(key, val);
        return true;

    }

    @Override
    public String getSubType() {
        return ".msc8391";
    }

    @Override
    public String getTableName() {
        return "kafka_babel_oneconnect_offenlend_inc";
    }

    @Override
    public String getType() {
        return RecordType.ONE_CONNECT_RECORD.toString();
    }

    @Override
    public String getComment() {
        return "壹账通-好信常贷客";
    }
}
